package com.poi.tl.sample.quickstart.app.tags;

import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.PictureType;
import com.deepoove.poi.data.Pictures;
import com.poi.tl.sample.quickstart.consts.AppConsts;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.util.HashMap;
import org.springframework.core.io.ClassPathResource;

public class _3ImageExport {

  public static void main(String[] args) throws Exception {
    ClassPathResource templateFile = new ClassPathResource(AppConsts.TAG_TEMPLATE_CLASS_PATH + "_3image_template.docx");
    ClassPathResource logoImg = new ClassPathResource(AppConsts.IMG_CLASS_PATH + "logo.png");
    String outFile = AppConsts.EXPORT_PATH + "_3image_template_output.docx";
    // 1 	compile 编译模板
    XWPFTemplate template = XWPFTemplate.compile(templateFile.getInputStream()).render(
        // 2 render 渲染数据
        new HashMap<String, Object>(){{
          // 推荐使用工厂 Pictures 构建图片模型

          // 指定图片路径
          String logoImgPath = logoImg.getFile().getPath();
          put("image", logoImgPath);

          // svg图片
          put("svg", "https://img.shields.io/badge/jdk-1.6%2B-orange.svg");

          // 设置图片宽高
          put("image1", Pictures.ofLocal(logoImgPath).size(120, 120).create());

          // 图片流
          put("streamImg", Pictures.ofStream(logoImg.getInputStream(), PictureType.PNG)
              .size(100, 120).create());

          // 网络图片(注意网络耗时对系统可能的性能影响)
          put("urlImg", Pictures.ofUrl("http://deepoove.com/images/icecream.png")
              .size(100, 100).create());

          // java图片
          BufferedImage bufferImage = new BufferedImage(200, 200, BufferedImage.TYPE_BYTE_GRAY);
          put("buffered", Pictures.ofBufferedImage(bufferImage, PictureType.PNG)
              .size(100, 100).create());

          /**
           * 支持的属性如下：
           * 图片类型
           * 图片路径
           * 宽度，单位是像素
           * 高度，单位是像素
           * 当无法获取图片时展示的文字
           */
        }});
    // 3 write 输出到流
    template.writeAndClose(new FileOutputStream(outFile));
  }

}
